#ifndef __FTPSERVER_H__
#define __FTPSERVER_H__
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include "protocol.h"
#include <sys/wait.h>
#include <stdbool.h>
#define FTPDIR "/home/china/ftpboot"
#define DEBUG

typedef struct cli_info {
    int fd;     /*客户端的套接字连接*/
    FILE *fp;   /*当前客户端的日志文件对应的文件指针*/
    unsigned short port;    /*客户端的端口号*/
    char ip[16];    /*客户端的点分式ip*/
} CLI_INFO;

/*客户端的消息数据*/
typedef struct cli_message {
    CLI_INFO *pcli;
    int cmd_no;
    char filename[256];
    int result;
} CLI_MES;

void sendFile(int confd, const char *filename);
int init_tcpserver(const char *ip, short port);

/*信号处理函数*/
void my_sighandler(int sig);
/*处理客户端的连接请求*/
void handle_connection(CLI_INFO *pcli);

/*
服务器读取客户端数据失败时， 关闭连接
*/
void handle_read_error(CLI_INFO *pcli);

/*回复客户端的ls请求*/
void resp_ls(CLI_INFO *pcli);

bool resp_get(CLI_INFO *pcli, const char *filename);

/*接收客户端上传的文件*/
bool resp_put(CLI_INFO *pcli, const char *filename, int filesize);

/*日志处理函数*/
void *log_handle(void *arg);

/*接收客户端的获取当前目录并打印的请求*/
bool resp_pwd(CLI_INFO *pcli);

bool resp_cd(CLI_INFO *pcli, const char *dirname);

/*服务器对申请获取文件加的回复*/
bool resp_getdir(CLI_INFO *pcli, const char *dirname);

/*服务器接收客户端的上传的文件*/
bool resp_putdir(CLI_INFO *pcli, const char *dirname);

/*服务器接收客户端的stata请求*/
bool resp_stat(CLI_INFO *pcli, const char *dirname);
#endif